import createElement from "./createElement";
import updateChildren from './updateChildren'
export default function patchVnode(oldVNode, newVNode) {
    // console.log('oldVNode',oldVNode,'newVNode',newVNode)
    // 判断新旧dom是否是相同对象
    if(oldVNode === newVNode) return false

    // 不是相同的,则判断新节点是否含有text属性
    // 含有text,则说明不含有children
    if(newVNode.text != '' && (newVNode.children == undefined || (newVNode.children && newVNode.children).length == 0)) {
        console.log(333)

        // 判断新旧text是否相同--相同则不考虑.只考虑不相同的
        if(newVNode.text != oldVNode.text) {
            // 不相同,新text覆盖旧的text/children
            oldVNode.elm.innerText = newVNode.text
        }
    } else {
        console.log(555)
        // 新的有children,老的没有children
        if(oldVNode.children == undefined && oldVNode.text != ''){
            oldVNode.elm.innerHTML = ''
            newVNode.children.forEach(el => {
                let chDom = createElement(el)
                oldVNode.elm.appendChild(chDom)
            })
        } else {
            console.log(666)
            // 不含有text--新老只有children
            // 新旧节点比较方法
            /*
            * 1 新前与旧前
            * 2 新后与旧后
            * 3 新后与旧前
            * 4 新前与旧后
            * */

            // 若新节点先遍历完,旧节点剩余的节点就是要删除的节点,若旧节点先遍历完,新节点剩余的节点就是新增的节点
            // 若新前匹配到旧后,则将新前指定的节点移动到旧节点未处理节点之前
            // 若新后匹配到旧钱,则将新后指定的节点移动到旧节点未处理节点之后
            // 若没有匹配上
            updateChildren(oldVNode.elm, newVNode.children,oldVNode.children)
        }

    }

}
